package com.itheima.tliasmanagementspringboot.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.tliasmanagementspringboot.mapper.ClazzMapper;
import com.itheima.tliasmanagementspringboot.mapper.EmpMapper;
import com.itheima.tliasmanagementspringboot.pojo.Clazz;
import com.itheima.tliasmanagementspringboot.common.PageBean;
import com.itheima.tliasmanagementspringboot.dtos.PageDto;
import com.itheima.tliasmanagementspringboot.service.ClazzService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class ClazzServiceImpl implements ClazzService {

    @Autowired
    ClazzMapper clazzMapper;
    @Autowired
    EmpMapper empMapper;

    /**
     * 查询所有班级信息
     * @return 查询到的班级信息的集合
     */
    @Override
    public List<Clazz> queryAllClazzService() {

        return clazzMapper.queryAllClazzMapper();
    }

    /**
     * 功能: 根据id查询班级信息
     * @return 查询到的班级信息
     */
    @Override
    public Clazz queryClazzByConditionService(Integer id) {
        return clazzMapper.queryClazzByConditionMapper(id);
    }

    /**
     * 根据ID删除班级信息
     * @param id 班级id
     */
    @Override
    public void deleteClazzById(Integer id) {
        //TODO: 待完善,需要等学员做好后,判断班级下是否有学员
        clazzMapper.deleteClazzById(id);
    }



    /**
     * 功能:分页查询员工信息
     * @param pageDto 请求参数
     * @return 返回的是封装后的查询到的数据集合和总条数的对象
     */
    @Override
    public PageBean<Clazz> pageQueryClazzService(PageDto pageDto) {
        //传统方式

//        pageDto.setPage((pageDto.getPage() - 1) * pageDto.getPageSize());//处理分页的起始位置
//        //1.查数据集合
//        List<Emp> emps = empMapper.PageQueryEmpListMapper(pageDto);
//
//        //2.查总条数
//        Integer total = empMapper.PageQueryEmpTotalMapper(pageDto);
//
//        //3.将上面两个数据封装到PageBean中
//        return new PageBean(total,emps);

        System.out.println("业务层:" + pageDto);
        //分页插件
        //1.开启分页,紧接着的第一个select会自动分页
        PageHelper.startPage(pageDto.getPage(), pageDto.getPageSize());

        //2.直接条件查询即可
        List<Clazz>  clazzs = clazzMapper.pageQueryClazzListMapper(pageDto);
        Page<Clazz> p = (Page<Clazz>) clazzs;
        List<Clazz> clazzList = p.getResult();
        //3.查询emp员工表查到班主任的姓名
        clazzList.forEach(c->{
            c.setMasterName(empMapper.queryEmpNameById(c.getMasterId()));
        });

//        return new PageBean<Clazz>(p.getTotal(), p.getResult());
        return new PageBean<Clazz>(p.getTotal(), clazzList);
    }

    /**
     * 功能: 添加/插入一条班级信息
     *
     * @param clazz
     */
    @Override
    public void insertClazzService(Clazz clazz) {
        //补全一些基础字段的信息(如:时间,密码,状态等等)
        clazz.setCreateTime(LocalDateTime.now());
        clazz.setUpdateTime(LocalDateTime.now());
        clazzMapper.insertClazzMapper(clazz);
    }

    /**
     * 功能:根据id更新班级信息
     * @param clazz :班级id
     */
    @Override
    public void updateClazzByIdService(Clazz clazz) {
        clazz.setUpdateTime(LocalDateTime.now());
        clazzMapper.updateClazzByIdMapper(clazz);
    }
}
